所謂知己知彼,百戰百勝,在學習一項語言之前,先了解一下他有什麼特性可以讓我們在學習上更得心應手!
今天主要會分成兩個部分,首先會先介紹 golang 是什麼,之後在講解如何在自己的電腦上設定開發環境
讓我們開始吧!
Golang 是由 2007 年 9 月由 Google 的 Rob Pike 與 Ken Thompson 開始設計,於 2009 年 11 月正式 release,於 2016 年被 TIOBE 評選為「2016 最佳程式語言」。
Golang 的語法與 C 語言類似,內部都具有指標的功能,可以更有效地控制與運用記憶體,以下分別來介紹幾項特點
golang 為開放原始碼的專案,任何想了解他底層是怎麼運作的都可以到 github 查看專案,如果覺得有哪些功能不好,也可以發 PR 給 Golang 開發團隊,任何人都可以為 golang 進行貢獻的。
因為靜態型別的特性,使得我們在編譯的期間就可以進行完整的型別檢查,幫助我們就找到大部分的型別錯誤。
編譯是將高階程式碼轉換為低階程式碼的過程,golang 與 C 和 C# 相同,都需要透過編譯產出執行檔,但以往編譯語言都有著編譯速度緩慢的問題,但 golang 在設計上就是以快速編譯著名,且在編譯的時候不用相依於其他的 library,所以大家不用擔心這個問題。
在目前一台電腦都有多顆核心的時代下,golang 在先天設計上就支援了併發,也就是所謂的 goroutine
,goroutine 是屬於輕量型的併發機制,因此建立上萬的 process 在使用 golang 開發時不是夢!
以往 C/C++ 給予開發者較為自由的記憶體管理權限,但如果在使用上忘記釋放會可能會有 memory leak
的情況發生,但是使用 golang 開發,開發者不需要主動去管理記憶體,golang 的 gc 機制會自動掃瞄無用的 object
或是 variable
並進行記憶體的回收利用,因此,使用者只需要透過 new
的方法分配記憶體,不需要額外的關注釋放的問題。
以往在協同開發的時候最痛苦的時候就是進行 code review
了,雖然在開發上已經有規範好 code style,但每個人都會有自己的一套寫法,在看的時候往往會出現強迫症想換行等等,但是使用 golang 就不會有這個問題,golang 有強制規範什麼地方該換行、全部都使用 tab 作為空格等等,讓開發者不必再為了 code style 所苦惱了,真的是一大福音!
講完這麼多特性相信大家一定迫不期待的想開始學習了吧,就讓我們從安裝開始!
目前使用環境為 macOS Catalina(10.15.4),所以範例主要會以 macOS 為主,其他的 OS 會附上相關連結
Golang 常見的安裝方法就跟斯斯一樣有三種,以下分別介紹這三種方式,大家可以選擇自己喜歡的進行服用
Windows
、Linux
與 Mac
三大系統,是典型的 one click 的安裝模式。mac
中可以用 homebrew
套件管理工具來安裝,在 linux
中可以依照不同的 os 使用 yum
或是 apt
進行安裝。上述三種方法就依照個人喜歡來選擇,沒有哪一個最好或是最差,下面我會詳細介紹三種方法要如何安裝。
【備註】以下範例是以 mac 環境為主,windows
與 linux
的安裝方法如下
需要先安裝 xcode
,xcode
會提供相關的編譯工具
.src.tar.gz
的檔案進行下載(如下圖)$home
目錄底下,執行以下指令將行安裝cd go/src
./all.bash
ALL TESTS PASSED
字樣就是安裝完成了!~/.bash_profile
檔案,在最下面加上以下指令,加入完畢之後使用 source ~/.bash_profile
指令使其生效,這行指令的用意在於讓 $path
的設定在重開機後也能夠生效,這樣就安裝完成拉!export GOPATH=$HOME/gopath
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
.pkg
的安裝檔(如下圖)繼續
直到安裝完成,這樣就成功安裝了!homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update && brew upgrade
brew install go
brew install git
輸入以下指令驗證 golang 是否成功安裝
go version
顯示下圖就表示,恭喜你!已經成功完成了安裝!
今天主要是跟大家分享了 golang 的相關特性以及使用各種方法將環境設定完成,設定完成之後我們就可以開始真正的 go into web
拉!大家明天見摟!
本文會同步到 medium